/**
 * 封装axios
 */

import axios from "axios"
import store from "@/store"
import { message } from "antd"
import { delToken } from '@/store/modules/login'
import { history } from "@/router/history"

// 1.创建axios实例
const request = axios.create({
  baseURL: 'http://geek.itheima.net/v1_0',
})

// 添加请求拦截器
request.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 使用场景：统一添加token
  const { token } = store.getState().login
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
request.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么
  return response
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  if (error.response.status === 401) {
    /**
     * 1. 删除token
     * 2. 消息弹框=>token失效
     * 3. 跳回登录页=>携带当前访问的页面地址，以便下次登录成功回跳
     */
    message.error('token失效了')
    store.dispatch(delToken())
    // 跳转login
    history.replace('/login', {
      // 携带当前访问页面的地址
      redirectUrl: history.location.pathname
    })

  }
  return Promise.reject(error)
})

// 2. 导出request实例
export default request